import type {Rule} from 'ant-design-vue/es/form'
import {checkIdCard} from '@/utils/yuxin-main/check'
/**
 * 手机号码校验
 * @param _rule
 * @param value 输入手机号码值
 */
export const validatePhone = (_rule: Rule, value: string) => {
	if (!value) {
		return Promise.reject('手机号码不能为空')
		// /^1\d{10}$/
	} else if (!/^1[3-9]\d{9}$/.test(value)) {
		return Promise.reject('手机号格式不正确')
	} else {
		return Promise.resolve()
	}
}
export const validateTel=(_rule: Rule, value: string) =>{
	if (!value) {
		return Promise.reject('手机号码不能为空')
		// /^1\d{10}$/
	}  else {
		return Promise.resolve()
	}
}

/**
 * 密码校验
 * @param _rule
 * @param value 输入密码值
 */
export const validatePassword = (_rule: Rule, value: string) => {
	if (!value) {
		return Promise.reject('密码不能为空')
	} else if (!/^(?=.*\d)(?=.*[a-zA-Z]).{6,16}$/.test(value)) {
		return Promise.reject('密码由6～16位字母 + 数字组合')
	} else {
		return Promise.resolve()
	}
}

/**
 * 验证码校验
 * @param _rule
 * @param value 验证码输入值
 */
export const validateVerifyCodes = (_rule: Rule, value: string) => {
	if (!value) {
		return Promise.reject('验证码不能为空')
	} else if (value.length !== 6) {
		return Promise.reject('验证码长度不正确')
	} else {
		return Promise.resolve()
	}
}
export const validateVerifyIdcard = (value: any) => {
	let message = ''
	let sId = value
	if (sId.length == 15) {
		return
		if (!/^\d{14}(\d|x)$/i.test(sId)) {
			message = '你输入的身份证长度或格式错误'
		} else {
			sId = sId.substr(0, 6) + '19' + sId.substr(6, 9)
			sId += getVCode(sId)
		}
	}
	function getVCode(CardNo17: any) {
		const Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
		const Ai = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
		let cardNoSum = 0
		for (let i = 0; i < CardNo17.length; i++) cardNoSum += CardNo17.charAt(i) * Wi[i]
		const seq = cardNoSum % 11
		return Ai[seq]
	}
	const aCity = {
		11: '北京',
		12: '天津',
		13: '河北',
		14: '山西',
		15: '内蒙古',
		21: '辽宁',
		22: '吉林',
		23: '黑龙江',
		31: '上海',
		32: '江苏',
		33: '浙江',
		34: '安徽',
		35: '福建',
		36: '江西',
		37: '山东',
		41: '河南',
		42: '湖北',
		43: '湖南',
		44: '广东',
		45: '广西',
		46: '海南',
		50: '重庆',
		51: '四川',
		52: '贵州',
		53: '云南',
		54: '西藏',
		61: '陕西',
		62: '甘肃',
		63: '青海',
		64: '宁夏',
		65: '新疆',
		71: '台湾',
		81: '香港',
		82: '澳门',
		91: '国外'
	}

	let iSum = 0
	const info = ''
	if (!/^\d{17}(\d|x)$/i.test(sId)) {
		message = '你输入的身份证长度或格式错误'
	}
	sId = sId.replace(/x$/i, 'a')
	if (aCity[parseInt(sId.substr(0, 2))] == null) {
		message = '你的身份证地区非法'
	}
	const sBirthday = sId.substr(6, 4) + '-' + Number(sId.substr(10, 2)) + '-' + Number(sId.substr(12, 2))
	const d = new Date(sBirthday.replace(/-/g, '/'))
	if (sBirthday != d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate()) {
		message = '身份证上的出生日期非法'
	}
	for (let i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11)
	if (iSum % 11 != 1) {
		message = '你输入的身份证号非法'
	}

	if (message) {
		return message
	}
	return false
}

export const enterpriseRules = (data: any): Record<string, Rule[] | Record<string, Rule[]>> => ({
	societyCode: [
		{
			required: true,
			message: '请输入社会统一代码'
		}
	],
	enterPriseAddress: [
		{
			required: true,
			message: '请输入企业地址'
		}
	],
	enterPriseName: [
		{
			required: true,
			message: '请输入企业名称'
		}
	],
	enterPrisePhone: [
		{
			required: true,
			message: '请输入企业电话'
		}
	],
	linkmanName: [
		{
			required: true,
			message: '请输入联系人姓名'
		}
	],
	linkmanPhone: [
		{
			required: true,
			validator: validatePhone
		}
	],
	enterPriseCustomerType: [
		{
			required: true,
			message: '请选择客户类型'
		}
	],
	entry: [
		{
			required: true
		}
	],
	preservePerSionId: [
		{
			required: true,
			message: '请选择维护人'
		}
	],
	linkmanIdCard: [
		{
			validator(rule: Rule, value: string) {
				if (!value) {
					return Promise.resolve()
				}
				if (!checkIdCard(value)) {
					return Promise.reject('身份证号不合法')
				} else {
					return Promise.resolve()
				}
			}
		}
	],
	// // 联系人
	// contacts: [
	// 	{
	// 		required: true,
	// 		validator(rule: any, values: any[]) {
	// 			values.forEach((e: any) => {
	// 				if (!e.linkmanName && !e.linkmanPhone) {
	// 					return Promise.reject('请完善联系人信息')
	// 				} else if (e.linkmanName && e.linkmanPhone && !/^1\d{10}$/.test(e.linkmanPhone)) {
	// 					return Promise.resolve()
	// 				} else {
	// 					return Promise.reject('')
	// 				}
	// 			})
	// 		}
	// 	}
	// ],
	teamworks: [
		{
			validator(rule: Rule, values: any[]) {
				const valids = values.filter(item => {
					// return item.beginTime && item.endTime && item.imgIdList.length
					return item.beginTime && item.endTime
				})

				if (values.length === 0 || valids.length < values.length) {
					return Promise.reject('请完善合作信息')
				}

				const discounts = values.flatMap(o => o.discounts)

				if (discounts && discounts.length) {
					if (discounts.some(o => !o.discountName)) {
						return Promise.reject('请输入协议优惠方案名称')
					}

					if (discounts.some(o => o.discountScale === null)) {
						return Promise.reject('请输入协议优惠折扣')
					}

					if (discounts.some(o => (o.feeSubjectIds || []).length === 0)) {
						return Promise.reject('请选择协议优惠范围')
					}
				}

				return Promise.resolve()
			}
		}
	]
})
